const { formatTxMetaForRpcResult } = require('../util')
const createAsyncMiddleware = require('json-rpc-engine/src/createAsyncMiddleware')

function createPendingNonceMiddleware ({ getPendingNonce }) {
  return createAsyncMiddleware(async (req, res, next) => {
    const {method, params} = req
    if (method !== 'eth_getTransactionCount') return next()
    const [param, blockRef] = params
    if (blockRef !== 'pending') return next()
    res.result = await getPendingNonce(param)
  })
}

function createPendingTxMiddleware ({ getPendingTransactionByHash }) {
  return createAsyncMiddleware(async (req, res, next) => {
    const {method, params} = req
    if (method !== 'eth_getTransactionByHash') return next()
    const [hash] = params
    const txMeta = getPendingTransactionByHash(hash)
    if (!txMeta) return next()
    res.result = formatTxMetaForRpcResult(txMeta)
  })
}

module.exports = {
  createPendingTxMiddleware,
  createPendingNonceMiddleware,
}
